home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / gui / gtlayout.lha / Source / LT_SetAttributes.c < prev    next >
C/C++ Source or Header  |  1998-09-09  |  33KB  |  1,527 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1998 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. /*****************************************************************************/
  15.  
  16. #include <stdarg.h>
  17.  
  18. /*****************************************************************************/
  19.  
  20. #include "Assert.h"
  21.  
  22. /*****************************************************************************/
  23.  
  24. VOID
  25. LT_SetAttributes(LayoutHandle *handle,LONG id,...)
  26. {
  27.     va_list VarArgs;
  28.  
  29.     va_start(VarArgs,id);
  30.     LT_SetAttributesA(handle,id,(struct TagItem *)VarArgs);
  31.     va_end(VarArgs);
  32. }
  33.  
  34.  
  35. /*****************************************************************************/
  36.  
  37.  
  38. VOID
  39. LTP_AddAllAndRefreshThisGadget(LayoutHandle *Handle,struct Gadget *Gadget)
  40. {
  41.     AddGList(Handle->Window,Handle->List,(UWORD)-1,(UWORD)-1,NULL);
  42.     RefreshGList(Gadget,Handle->Window,NULL,1);
  43. }
  44.  
  45. VOID
  46. LTP_FixState(LayoutHandle *Handle,BOOL State,struct Gadget *Gadget,UWORD Bit)
  47. {
  48.     if(Gadget)
  49.     {
  50.         LTP_StripGadgets(Handle,Handle->List);
  51.  
  52.         if(State)
  53.             Gadget->Flags |=  Bit;
  54.         else
  55.             Gadget->Flags &= ~Bit;
  56.  
  57.         LTP_AddAllAndRefreshThisGadget(Handle,Gadget);
  58.     }
  59. }
  60.  
  61. BOOL
  62. LTP_NotifyPager(LayoutHandle *Handle,LONG ID,LONG Page)
  63. {
  64.     if(ID != -1)
  65.     {
  66.         LT_SetAttributes(Handle,ID,
  67.             LAGR_ActivePage,Page,
  68.         TAG_DONE);
  69.  
  70.         if(Handle->Failed)
  71.             return(FALSE);
  72.     }
  73.  
  74.     return(TRUE);
  75. }
  76.  
  77.  
  78. /*****************************************************************************/
  79.  
  80.  
  81. /****** gtlayout.library/LT_SetAttributesA ******************************************
  82. *
  83. *   NAME
  84. *    LT_SetAttributesA -- Change object attributes
  85. *
  86. *   SYNOPSIS
  87. *    LT_SetAttributesA(Handle,ID,Tags);
  88. *                        A0   D0  A1
  89. *
  90. *    VOID LT_SetAttributes(LayoutHandle *,LONG,struct TagItem *);
  91. *
  92. *    LT_SetAttributes(Handle,ID,...);
  93. *
  94. *    VOID LT_SetAttributes(LayoutHandle *,LONG,...);
  95. *
  96. *   FUNCTION
  97. *    This routine passes the tag item list it gets directly
  98. *    over to GT_SetGadgetAttrsA(), so any tag items valid for
  99. *    gadtools.library can be used here as well. Some filtering
  100. *    may be done in order to stop objects from getting redrawn
  101. *    if this is not absolutely necessary.
  102. *
  103. *   INPUTS
  104. *    Handle - Pointer to LayoutHandle.
  105. *
  106. *    ID - ID number of the object to change. This is the same value
  107. *        you passed via LA_ID to LT_New() when you created this object.
  108. *
  109. *    Tags - Attributes controlling object states.
  110. *
  111. *
  112. *    All gadtools.library tags are allowed, but not all are supported.
  113. *    In addition to these tags a few additional tag values are
  114. *    supported:
  115. *
  116. *    LAHN_AutoActivate (BOOL) - Set to TRUE if you want the interface
  117. *        to always keep a string gadget active if possible. Hitting
  118. *        the return key will then cause the next following string
  119. *        gadget to get activated, either cycling through all the
  120. *        string gadgets available or stopping at the next string
  121. *        gadget to have the LAST_LastGadget attribute set.
  122. *
  123. *    LAHN_UserData (APTR) - Store user specific data in the
  124. *        LayoutHandle->UserData entry. (V9)
  125. *
  126. *    LAHN_RawKeyFilter (BOOL) - Discard unprocessed IDCMP_RAWKEY
  127. *        events. (V13)
  128. *        Default: TRUE
  129. *
  130. *    LAHN_LocaleHook (struct Hook *) - The hook to call when
  131. *        locale string IDs are to be mapped to strings. The
  132. *        hook function is called with the following parameters:
  133. *
  134. *        String = HookFunc(struct Hook *Hook,struct LayoutHandle *Handle,
  135. *          D0                            A0                         A2
  136. *                          LONG ID)
  137. *                               A1
  138. *
  139. *        The function is to look up the string associated with the ID
  140. *        passed in and return the string.
  141. *
  142. *    LAHN_ExitFlush (BOOL) - When the LayoutHandle is finally disposed
  143. *        of with LT_DeleteHandle() all variables maintained by the
  144. *        input handling code will be flushed. For example, if you
  145. *        would use the LA_STRPTR tag for STRING_KIND objects the
  146. *        last string gadget contents would be copied into the buffer
  147. *        pointed to by LA_STRPTR. If you do not want to use this
  148. *        feature, disable it with "LAHN_ExitFlush,FALSE". (V9)
  149. *        Default: TRUE
  150. *
  151. *    GAUGE_KIND:
  152. *
  153. *        LAGA_Percent (LONG) - Percentage of the gauge to fill.
  154. *
  155. *        LAGA_InfoText (STRPTR) - Text to be printed within the
  156. *            gauge display, such as a percentage number.
  157. *
  158. *    BOX_KIND:
  159. *
  160. *        LABX_Index (LONG) - The number of the line to change, this
  161. *            tag works in conjunction with the LABX_Text tag.
  162. *
  163. *        LABX_Text (STRPTR) - The text to put into the line indicated
  164. *            by the LABX_Index tag.
  165. *            As of v26 the LABX_Index tag may be omitted, the library
  166. *            will then assume the line index will be 0.
  167. *
  168. *        LABX_Lines (STRPTR *) - The text to set for the box contents,
  169. *            terminate the text array with NULL.
  170. *
  171. *    HORIZONTAL_KIND:
  172. *    VERTICAL_KIND:
  173. *
  174. *        LAGR_ActivePage (LONG) - Index number of page to display
  175. *            within the group.
  176. *
  177. *                NOTE: requires that this group was created
  178. *                    with the LAGR_ActivePage attribute set.
  179. *
  180. *    INTEGER_KIND:
  181. *
  182. *        LAIN_Min (LONG) - Minimum allowed value for this
  183. *            object.
  184. *
  185. *        LAIN_Max (LONG) - Maximum allowed value for this
  186. *            object.
  187. *
  188. *    LISTVIEW_KIND:
  189. *
  190. *        LALV_Selected (LONG) - Combines GTLV_Selected and
  191. *            GTLV_Top (for Kickstart V37) or GTLV_MakeVisible
  192. *            (for Kickstart V39 and greater). This means, the
  193. *            list display will be changed in order to show
  194. *            the item to be selected. (V34)
  195. *
  196. *    LEVEL_KIND:
  197. *
  198. *        LAVL_NumTicks (WORD) - Number of tick marks to draw
  199. *           next to the slider body.
  200. *
  201. *    PASSWORD_KIND:
  202. *
  203. *        LAPW_String (STRPTR) - Secret text to use
  204. *
  205. *    POPUP_KIND
  206. *
  207. *        LAPU_Labels (STRPTR *) - To block access to the popup
  208. *            menu, for example before you free the current list
  209. *            of labels, you can pass ~0 as the list parameter. (V25)
  210. *
  211. *    STRING_KIND:
  212. *
  213. *        LAST_CursorPosition (LONG) - Repositions the cursor,
  214. *            pass -1 to move it to the end of the string. (V7)
  215. *
  216. *    TAPEDECK_KIND:
  217. *
  218. *        LATD_Pressed (BOOL) - TRUE to make this button shown
  219. *            as pressed, FALSE to show it in depressed state.
  220. *
  221. *    BOOPSI_KIND:
  222. *
  223. *        All tags are passed straight through to SetGadgetAttrs(..).
  224. *
  225. *    All objects:
  226. *
  227. *        LA_LabelText (STRPTR) - New gadget label text to use.
  228. *
  229. *        LA_LabelID (LONG) - Locale text ID to use for this object.
  230. *
  231. *   RESULT
  232. *    none
  233. *
  234. *   SEE ALSO
  235. *    gadtools.library/GT_SetGadgetAttrsA()
  236. *    intuition.library/SetGadgetAttrsA
  237. *
  238. ******************************************************************************
  239. *
  240. */
  241.  
  242. VOID LIBENT
  243. LT_SetAttributesA(REG(a0) LayoutHandle *handle,REG(d0) LONG id,REG(a1) struct TagItem *TagList)
  244. {
  245.     if(handle && TagList)
  246.     {
  247.         struct Gadget    *Gadget = NULL;
  248.         struct TagItem    *ThisTag,*ThisList = TagList;
  249.         ObjectNode        *Node = NULL;
  250.  
  251.         while(ThisTag = NextTagItem(&ThisList))
  252.         {
  253.             switch(ThisTag->ti_Tag)
  254.             {
  255.                 case LH_AutoActivate:
  256.  
  257.                     handle->AutoActivate = ThisTag->ti_Data;
  258.                     break;
  259.  
  260.                 case LH_RawKeyFilter:
  261.  
  262.                     handle->RawKeyFilter = ThisTag->ti_Data;
  263.                     break;
  264.  
  265.                 case LH_UserData:
  266.  
  267.                     handle->UserData = (APTR)ThisTag->ti_Data;
  268.                     break;
  269.  
  270.                 case LH_ExitFlush:
  271.  
  272.                     handle->ExitFlush = ThisTag->ti_Data;
  273.                     break;
  274.  
  275.                 case LH_LocaleHook:
  276.  
  277.                     handle->LocaleHook = (struct Hook *)ThisTag->ti_Data;
  278.                     break;
  279.  
  280.                 case LAPR_Gadget:
  281.  
  282.                     Gadget = (struct Gadget *)ThisTag->ti_Data;
  283.                     break;
  284.  
  285.                 case LAPR_Object:
  286.  
  287.                     Node = (ObjectNode *)ThisTag->ti_Data;
  288.                     break;
  289.             }
  290.         }
  291.  
  292.         if(Node)
  293.             Gadget = Node->Host;
  294.         else
  295.         {
  296.             if(Gadget)
  297.             {
  298.                 if(Node = (ObjectNode *)Gadget->UserData)
  299.                 {
  300.                     if(Node->Host != Gadget || Node->PointBack != Node)
  301.                         Node = NULL;
  302.                 }
  303.             }
  304.         }
  305.  
  306.         if(!Gadget)
  307.         {
  308.             if(Gadget = LTP_FindGadget(handle,id))
  309.             {
  310.                 if(Node = (ObjectNode *)Gadget->UserData)
  311.                 {
  312.                     if(Node->Host != Gadget || Node->PointBack != Node)
  313.                         Node = NULL;
  314.                 }
  315.             }
  316.             else
  317.                 Node = LTP_FindNode(handle,id);
  318.         }
  319.  
  320.         if(Node)
  321.         {
  322.             STATIC const Tag Filter[2] = { GA_Disabled,TAG_DONE };
  323.  
  324.             struct TagItem    *NewTags = NULL;
  325.             ULONG             Exclude = NULL;
  326.  
  327.             switch(Node->Type)
  328.             {
  329.                 #ifdef DO_PASSWORD_KIND
  330.                 {
  331.                     case PASSWORD_KIND:
  332.  
  333.                         if(ThisTag = F